home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 March / CMCD0305.ISO / Software / Shareware / Utilitare / emu / Emu8086_Setup_307c.exe / {app} / Samples / zTest.asm < prev   
Assembly Source File  |  2002-11-28  |  6KB  |  440 lines

  1. ; This is just a test file,
  2. ; I used it to check the compiler,
  3. ; it does nothing specific.
  4.  
  5. #make_COM#
  6.  
  7. ; COM file is loaded at CS:0100h
  8. ORG 100h
  9.  
  10.  
  11. jmp start
  12.  
  13. arr db 1, 2, 3, 4, 5
  14.  
  15. start:
  16.  
  17. MOV BX, 1
  18. MOV SI, 1
  19.  
  20. mov arr[bx][si], 1
  21.  
  22. add [bx][si] arr, 1
  23.  
  24.  
  25.  
  26.  
  27. mov al, 95h
  28. add al, 95h
  29. daa        ; AL=90h , CF=1, AF=1
  30.  
  31. mov al, 05h
  32. add al, 15h
  33. daa        ; AL=20h , CF=0, AF=1
  34.  
  35.  
  36.         
  37. mov al, 0
  38. sub al, 95h
  39. das        ; AL=05h , CF=1, AF=1
  40.  
  41. mov al, 50h
  42. sub al, 15h
  43. das             ; AL=35h , CF=0, AF=1
  44.  
  45.  
  46. MOV AX, [BP]
  47. MOV AX, [BP+0]
  48. MOV AX, [BP+3]
  49.  
  50. MOV DL, 12h
  51. MOV DH, 34h
  52.  
  53. XCHG DL, DH
  54.  
  55. XCHG D1, DL
  56. XCHG DH, D2
  57.  
  58.  
  59. LEA BX, v1
  60. MOV b. [BX], 5
  61.  
  62. XOR CX, CX
  63.  
  64. MOV CL, 1
  65. OR  CL, 2
  66. XOR CL, 1
  67. NOT CL
  68. NEG CL
  69. NEG CL
  70.  
  71. MOV CX, 0ABCDh
  72. OR  CX, 10b
  73. XOR CX, 00B00h
  74. NOT CX
  75. NEG CX
  76. NEG CX
  77.  
  78.  
  79. MOV AL, 5
  80. STC        ; set Carry Flag.
  81. SBB AL, 0       ; AL = AL - 0 - CF = 4
  82.  
  83. STC        ; set Carry Flag.
  84. ADC AL, 0       ; AL = AL + 0 + CF = 5
  85.  
  86.  
  87. MOV AL, 5
  88. STC        ; set Carry Flag.
  89. SBB AL, 2       ; AL = AL - 2 - CF = 2
  90.  
  91. STC        ; set Carry Flag.
  92. ADC AL, 2       ; AL = AL + 2 + CF = 5
  93.  
  94.  
  95.  
  96. STC
  97. ; just clear CF:
  98. ADD AL, 0
  99.  
  100. STC
  101. ; clear CF, set ZF:
  102. SUB AL, AL     ; AL = 0.
  103.  
  104.  
  105. ; AX = 10 * 2 = 20 (14h)
  106. MOV AX, 10
  107. SHL AX, 1
  108.  
  109. ; AX = 10 * 2 = 20 (14h)
  110. MOV BL, 2
  111. MOV AX, 10
  112. MUL BL
  113.  
  114.  
  115.  
  116. MOV AX, 1234h
  117. MOV BX, 5678h
  118.  
  119. XCHG AX, BX
  120.  
  121. ; the same as XCHG:
  122. XOR AX, BX
  123. XOR BX, AX
  124. XOR AX, BX
  125.  
  126.  
  127. LEA BX, dat
  128. MOV AL, 2
  129. XLATB     ; AL = 33h
  130.  
  131. JMP skip_data
  132.  
  133. dat DB 11h, 22h, 33h, 44h, 55h
  134.  
  135. skip_data:
  136.  
  137.  
  138. MOV AL, 00000111b
  139. XOR AL, 00000010b    ; AL = 00000101b
  140.  
  141.  
  142. MOV AL, 00000101b
  143. TEST AL, 1         ; ZF = 0.
  144. TEST AL, 10b       ; ZF = 1.
  145.  
  146.  
  147. MOV AX, 0
  148. MOV CX, 5
  149. m1: INC AX
  150. LOOP m1
  151.  
  152. MOV AL, 2
  153. MOV CX, 5
  154. m2: CMP AL, 2
  155. LOOPE m2
  156.  
  157. MOV AL, 2
  158. MOV CX, 5
  159. m3: CMP AL, 2
  160. LOOPNE m3
  161.  
  162.  
  163. MOV AL, 1
  164. MOV AH, 1
  165. CMP AL, AH
  166.  
  167.  
  168. MOV CL, 0
  169. MOV AX, 5
  170. SHL AX, CL
  171.  
  172. MOV CL, 1
  173. MOV AX, 0FFFFh
  174. SHL AX, CL
  175. SAL AX, CL
  176. SHR AX, CL
  177. SAR AX, CL
  178. ROL AX, CL
  179. ROR AX, CL
  180. RCL AX, CL
  181. RCR AX, CL
  182.  
  183. MOV CL, 1
  184. MOV AL, 0FFh
  185. SHL AL, CL
  186. SAL AL, CL
  187. SHR AL, CL
  188. SAR AL, CL
  189. ROL AL, CL
  190. ROR AL, CL
  191. RCL AL, CL
  192. RCR AL, CL
  193.  
  194. LEA BX, a
  195. SHL [BX], CL
  196. SHL [BX], 2
  197. SHL word ptr [BX], CL
  198. SHL word ptr [BX], 3
  199.  
  200.  
  201. ; the same as MOV AX, 12
  202. MOV     AX, 7 * 2 - 2
  203. MOV     AX, -2 + 7 * 2
  204.  
  205. ; the same as MOV AX, 10
  206. MOV     AX, (-2 + 7) * 2
  207.  
  208. ; the same as MOV AX, -10
  209. MOV     AX, (2 - 7) * 2
  210. MOV     AX, (- 7 + 2) * 2
  211.  
  212. ; hexadecimal input:
  213. MOV    AX, 10h        ; 16
  214. MOV    AX, 10h - 1 ; 15
  215. MOV    AX, 10h / 2 ; 8
  216.  
  217. ; octal input:
  218. MOV    AX, 11o        ; 9
  219.  
  220. ; binary input:
  221. MOV    AX, 1010b    ; 10
  222. ; 100:
  223. MOV    AX, 1010b * 0Ah
  224.  
  225. ; modify variables using memory
  226. ; pointers:
  227. MOV SI, OFFSET a
  228. CS:
  229. MOV [SI], 44h
  230. CS:
  231. MOV [SI+1], 55h
  232.  
  233. ; treat two byte variables
  234. ; as a single word variable:
  235. MOV CS:w.[SI], 0
  236.  
  237. ; low byte is stored at
  238. ; lower address:
  239. CS:
  240. MOV w.[SI], 1234h
  241.  
  242. MOV w. CS: [SI], 5678h
  243.  
  244. ; same thing, using different
  245. ; syntax:
  246.  
  247. MOV word ptr a, 5
  248. MOV word ptr a, 5678h
  249. MOV byte ptr a, 1
  250. MOV a, 2
  251.  
  252. ; compiler should report errors:
  253. ; MOV a, 5678h  
  254. ; MOV  BX, a
  255.  
  256. MOV BX, w.a
  257. MOV CX, word ptr a
  258.  
  259.  
  260. ; unconditional jump forward:
  261. ; skip over next 2 bytes,
  262. JMP $2
  263. a DB 3    ; 1 byte.
  264. b DB 4    ; 1 byte.
  265.  
  266. ; should be compiled:
  267. ; just a check of different
  268. ; memory access syntax:
  269.  
  270. MOV AL, [BX + SI]
  271. MOV AL, [BX + DI]
  272. MOV AL, [BP + SI]
  273. MOV AL, [BP + DI]
  274. MOV AL, [BP + DI]
  275.  
  276. MOV AL, [SI]
  277. MOV AL, [DI]
  278. MOV AL, a ; d16 (variable offset only)
  279. MOV AL, [BX]
  280.  
  281. ; + d8
  282. MOV AL, [BX + SI] + 5
  283. MOV AL, [BX + DI] + 6
  284. MOV AL, [BP + SI] + 7
  285. MOV AL, [BP + DI] + 8
  286.  
  287. ; + d8
  288. MOV AL, [SI] + 9
  289. MOV AL, [DI] + 1
  290. MOV AL, [BP] + 2
  291. MOV AL, [BX] + 3
  292.  
  293. ; + d16
  294. MOV AL, [BX + SI] + 1234h
  295. MOV AL, [BX + DI] + 1234h
  296. MOV AL, [BP + SI] + 1234h
  297. MOV AL, [BP + DI] + 1234h
  298.  
  299. ; + d16
  300. MOV AL, [SI] + 1234h
  301. MOV AL, [DI] + 1234h
  302. MOV AL, [BP] + 1234h
  303. MOV AL, [BX] + 1234h
  304.  
  305.  
  306.  
  307. ; JCC jump back 7 bytes:
  308. ; (JMP takes 2 bytes itself)
  309. MOV BL,9
  310. DEC BL      ; 2 bytes.
  311. CMP BL, 0   ; 3 bytes.
  312. JNZ $-7
  313.  
  314. ; modify only high byte
  315. ; of a variable
  316. MOV BX, 1
  317. MOV b.V1[BX], 50h
  318.  
  319. ; modify two byte
  320. ; variables in once:
  321. XOR BX, BX  ; BX = 0
  322. MOV w.D1[BX], 1234h
  323.  
  324. ;==========================
  325.  
  326. ; Signed Byte
  327. ;  multiplication:
  328. ; AX = AL * BL = 10
  329. ;               (000Ah)
  330. MOV AL, -5
  331. MOV BL, -2
  332. IMUL BL
  333.  
  334. NOP
  335.  
  336. ; Unsigned Byte
  337. ;  multiplication:
  338. ; AX = AL * BL = 63754
  339. ;               (0F90Ah)
  340. MOV AL, 251
  341. MOV BL, 254
  342. MUL BL
  343.  
  344. NOP
  345.  
  346. ; Signed Word
  347. ;  multiplication:
  348. ; (DX AX) = AX * BX = 10
  349. ;            (0000 000Ah)
  350. MOV AX, -5
  351. MOV BX, -2
  352. IMUL BX
  353.  
  354. NOP
  355.  
  356. ; Unsigned Word
  357. ;  multiplication:
  358. ; (DX AX) = AX * BX = 4294508554
  359. ;            (0FFF9 000Ah)
  360. MOV AX, 65531
  361. MOV BX, 65534
  362. MUL BX
  363.  
  364. NOP
  365.  
  366. ;==========================
  367.  
  368. ; Signed Word
  369. ;  division:
  370. ; AL = AX / BL = 2
  371. ; AH = -3 (remainder) (0FDh)
  372. MOV AX, -13
  373. MOV BL, -5
  374. IDIV BL
  375.  
  376. NOP
  377.  
  378. ; Unsigned Word
  379. ;  division:
  380. ; AL = AX / BL = 254 (0FEh)
  381. ; AH = 230 (remainder) (0E6h)
  382. MOV AX, 65000
  383. MOV BL, 255
  384. DIV BL
  385.  
  386. NOP
  387.  
  388.  
  389. ; Signed Double-Word
  390. ;  division:
  391. ; AX = (DX AX) / BX = 2
  392. ; DX = -3 (remainder) (0FFFDh)
  393. MOV AX, -13
  394. ; Convert Word to Double-Word
  395. ;         (AX  to DX AX)
  396. CWD  
  397. MOV BX, -5
  398. IDIV BX
  399.  
  400. NOP
  401.  
  402.  
  403. ; Unsigned Double-Word
  404. ;  division:
  405. ; AX = (DX AX) / BX = 
  406. ;    1048575 / 255 = 4112
  407. ;                   (1010h)
  408. ; DX = 15 (remainder)
  409. ;    (000Fh)
  410. MOV DX, 0Fh
  411. MOV AX, 0FFFFh
  412. MOV BX, 255
  413. DIV BX
  414.  
  415. NOP
  416.  
  417. ;==========================
  418.  
  419.  
  420. MOV CL, 2
  421. MOV AX, 255
  422. DIV CL
  423.  
  424. MOV AX, 255
  425. SHR AX, 1
  426.  
  427.  
  428.  
  429. RET  ; return to operating system.
  430.  
  431.  
  432. ; execution never gets here,
  433. ; so we may define variable
  434. ; here:
  435.  
  436. V1 DW 1234h
  437.  
  438. D1 DB 33h
  439. D2 DB 44h
  440.